static void gtk_widget_set_usize_internal (GtkWidget *widget,
gint width,
gint height);
-static void gtk_widget_get_draw_rectangle (GtkWidget *widget,
- GdkRectangle *rect);
static void gtk_widget_add_events_internal (GtkWidget *widget,
GdkDevice *device,
FALSE,
GTK_PARAM_READWRITE));
- /**
- * GtkWidget:draw-border:
- *
- * The "draw-border" style property defines the size of areas outside
- * the widget's allocation to draw.
- *
- * Since: 2.8
- */
- gtk_widget_class_install_style_property (klass,
- g_param_spec_boxed ("draw-border",
- P_("Draw Border"),
- P_("Size of areas outside the widget's allocation to draw"),
- GTK_TYPE_BORDER,
- GTK_PARAM_READABLE));
-
/**
* GtkWidget:link-color:
*
gdk_window_invalidate_rect (widget->window, &invalid_rect, TRUE);
}
-static void
-widget_add_child_draw_rectangle (GtkWidget *widget,
- GdkRectangle *rect)
-{
- GdkRectangle child_rect;
-
- if (!gtk_widget_get_mapped (widget) ||
- widget->window != widget->parent->window)
- return;
-
- gtk_widget_get_draw_rectangle (widget, &child_rect);
- gdk_rectangle_union (rect, &child_rect, rect);
-}
-
-static void
-gtk_widget_get_draw_rectangle (GtkWidget *widget,
- GdkRectangle *rect)
-{
- if (!gtk_widget_get_has_window (widget))
- {
- GtkBorder *draw_border = NULL;
-
- *rect = widget->allocation;
-
- gtk_widget_style_get (widget,
- "draw-border", &draw_border,
- NULL);
- if (draw_border)
- {
- rect->x -= draw_border->left;
- rect->y -= draw_border->top;
- rect->width += draw_border->left + draw_border->right;
- rect->height += draw_border->top + draw_border->bottom;
-
- gtk_border_free (draw_border);
- }
-
- if (GTK_IS_CONTAINER (widget))
- gtk_container_forall (GTK_CONTAINER (widget),
- (GtkCallback)widget_add_child_draw_rectangle,
- rect);
- }
- else
- {
- rect->x = 0;
- rect->y = 0;
- rect->width = widget->allocation.width;
- rect->height = widget->allocation.height;
- }
-}
-
/**
* gtk_widget_queue_draw:
* @widget: a #GtkWidget
g_return_if_fail (GTK_IS_WIDGET (widget));
- gtk_widget_get_draw_rectangle (widget, &rect);
+ gtk_widget_get_allocation (widget, &rect);
gtk_widget_queue_draw_area (widget,
rect.x, rect.y,
{
GdkRectangle rect;
cairo_region_t *region;
-
+
if (!gtk_widget_get_realized (widget))
return;
- gtk_widget_get_draw_rectangle (widget, &rect);
+ gtk_widget_get_allocation (widget, &rect);
- /* get_draw_rectangle() gives us window coordinates, we
- * need to convert to the coordinates that widget->allocation
- * is in.
- */
- if (gtk_widget_get_has_window (widget) && widget->parent)
- {
- int wx, wy;
-
- gdk_window_get_position (widget->window, &wx, &wy);
-
- rect.x += wx;
- rect.y += wy;
- }
-
region = cairo_region_create_rectangle (&rect);
gtk_widget_invalidate_widget_windows (widget, region);
cairo_region_destroy (region);
g_return_val_if_fail (GTK_IS_WIDGET (widget), NULL);
g_return_val_if_fail (region != NULL, NULL);
- gtk_widget_get_draw_rectangle (widget, &rect);
+ gtk_widget_get_allocation (widget, &rect);
dest = cairo_region_create_rectangle (&rect);